package com.hdp.kotlin_samples.base

/**
 * author:hdp
 * on:2019/6/11:20:46
 * desc:Kotlin中的类型转换
 * 类型转换是将一个数据类型变量转换为另一种数据类型的过程。
 * 在Kotlin中，不支持将较小数据类型隐式转换为较大数据类型(在java中支持)。
 * 例如，Int不能分配转换为Long或Double。
 * toByte()
 * toShort()
 * toInt()
 * toLong()
 * toFloat()
 * toDouble()
 * toChar()
 *
 * important:常用技巧
 *      1、如何避免数据转换异常？比如将一个字符串转成Int?
 *          可以通过:toIntOrNull()进行转换，当转换失败时候，会转成null
 *      2、如何将一个字符串转成不可空的Int?
 *          可以通过:toIntOrNull?:0,结合"?:"运算符给一个默认值实现
 *
 * ！相比于Java，是不是方便很多
 *
 */
class TypeConvertTips {
    var a = 123;
    var b: Long = 123;
    var c: String = "123"
    var d: String? = "dddd"
}

fun main() {
    val typeConvertTips = TypeConvertTips()
    println(typeConvertTips.a.toLong())
    println(typeConvertTips.b.toInt())
    println(typeConvertTips.c.toLong())
//    println(typeConvertTips.d?.toLong())  //报错，实际就是调用Long.parseLong()
    println(typeConvertTips.d?.toLongOrNull())  //不报错，转成了null
    println(typeConvertTips.d?.toLongOrNull() ?: 0)  //不报错，转成了0
}